LVA Datenbanksysteme (LU 1.0 181.129)
Wintersemester 2005/2006

Gruppe A - Beispiel 2

Katalogversand

Lösen Sie die folgenden Probleme mittels SQL:

  1. Geben Sie für jeden einzelnen Artikel die Anzahl der vorhandenen Serienstücke sowie den Preis aus. Beachten sie dabei, dass dieser unter Umständen für die Ausgabe erst ermäßigt werden muss.
    (Anmerkung: der Preis eines Artikel mit beispielsweise 20% Ermäßigung entspricht also 80% des Normalpreises!)

  2. Geben Sie für jede Filiale den Kunden (oder die Kunden) aus, der bei ihr die meisten Bestellungen gemacht hat.

  3. Geben Sie die Bestellnummern aller Bestellungen aus, bei denen die bestellten Stückzahlen aller Artikel in der jeweiligen Filiale lagernd sind.

  4. Geben Sie die Bezeichnung jener Zahlungsart aus, mit der bisher die meisten Bestellungen getätigt wurden.

  5. Geben Sie alle Artikel aus, von denen sich in mindestens 4 unterschiedlichen Filialen Serienstücke befinden.

  6. Geben Sie alle Paare von Personal-Mitarbeitern derselben Filiale gemeinsam mit der positiven Differenz ihrer Gehälter aus.
    (Anmerkung: Achten Sie darauf, dass jedes Paar nur einmal ausgegeben werden soll!)

Lösen Sie die folgenden Probleme mittels PL/SQL:

(Anmerkung: Verwenden Sie, falls notwendig, die "transaction control" Befehle COMMIT, ROLLBACK und SAVEPOINT!)
  1. a) Schreiben Sie eine Funktion, die einen Artikel returniert (=ausgibt) von welchem es aktuell die meisten Serienstücke gibt und dessen Normalpreis zwischen 7 und 13 Euro liegt.
    b) Weiters soll auch eine Funktion erstellt werden, die die niedrigste freie Bestellnummer ermittelt und diese zurückliefert.

  2. Schreiben Sie eine Prozedur die für alle Mitglieder automatisch eine Bestellung tätigt, die seit dem als Parameter übergebenen Datum nichts mehr bestellt haben.
    Verwenden Sie zur Berechnung der Bestellnummer sowie zur Auswahl des Artikels die Funktionen aus Aufgabe 7, wobei von dem ausgewählten Artikel genau 1 Stück bestellt werden soll. Für die Filiale sowie die Zahlungsart können der Einfachheit halber jene mit der Nummer 1 gewählt werden, den Gesamtpreis initialisieren Sie mit "0", dessen Berechnung erfolgt durch den Trigger aus Beispiel 9.
    (Anmerkung: die Funktion zur Auswahl des Artikels muss für jedes betroffene Mitglied erneut aufgerufen werden, da sich nach jeder erstellten Bestellung die Anzahl der vorhandenen Serienstücke automatisch verringert (siehe Aufgabe 9)).
    Falls kein passender Artikel mehr vorhanden ist, soll die Transaktion zwar abgebrochen werden, alle bereits erstellten Bestellungen sollen allerdings nicht mehr rückgängig gemacht werden. Sollte dieser Fall bzw. diese Exception auftreten, soll außerdem ein passende Fehlermeldung ausgegeben werden.

  3. Schreiben Sie einen Trigger, der jedesmal ausgelöst wird, nachdem ein Artikel einer Bestellung zugeordnet wurde.
    Es soll nun der bisherige Gesamtpreis der Bestellung um den Preis für die Stücke des Artikels erhöht werden und in der Bestellung "upgedated" werden. (Anmerkung: Achten Sie dabei auch auf eventuelle Ermäßigungen für die einzelnen Artikel)
    Mitglieder erhalten noch zusätzlich eine Ermäßigung von 5%.
    (Anmerkung: bei Mitgliedern soll natürlich auch das Datum ihrer letzten Bestellung entsprechend verändert werden!)
    Um die Stückzahlen zu verringern, sollen außerdem in der bestellten Anzahl Serienstücke des Artikels gelöscht werden.
    (Anmerkung: der Einfachheit halber kann davon ausgegangen werden, dass Artikeln nur dann Bestellungen zugeordnet werden wenn auch Serienstücke in der bestellten Anzahl vorhanden sind, d.h. es ist nicht nötig vor dem Löschen zu prüfen ob überhaupt genügend Serienstücke vorhanden sind!)
    (Tipp: erstellen sie am besten eine Prozedur (stored procedure) die all diese Aufgaben übernimmt und einen Trigger der lediglich diese Prozedur mit den benötigten Parametern (BestellNr, ArtikelNr, Stückzahl) aufruft!)